package com.lcc.lynx.jdbc.util;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.lcc.lynx.jdbc.pojo.PageParams;

import java.util.List;
import java.util.function.Function;

/**
 * @author lcc
 * @date 2025/6/26 09:04
 */
public class PageUtil {

    /**
     * 通用分页查询
     *
     * @param dv
     * @param pageParams
     * @param consumer
     * @return
     */
    public static <DV> PageInfo<DV> page(DV dv, PageParams pageParams, Function<DV, List<DV>> consumer) {
        if (pageParams.getLimit() > 0) {
            PageHelper.offsetPage(pageParams.getOffset(), pageParams.getLimit());
        } else {
            PageHelper.startPage(pageParams.getPageNum(), pageParams.getPageSize(), true);
        }
        return new PageInfo<>(consumer.apply(dv));
    }

    /**
     * 通用分页查询
     *
     * @param dv
     * @param consumer
     * @return
     */
    public static <DV> PageInfo<DV> page(DV dv, int pageNum, int pageSize, Function<DV, List<DV>> consumer) {
        PageHelper.startPage(pageNum, pageSize, true);
        return new PageInfo<>(consumer.apply(dv));
    }

    /**
     * 通用分页查询
     *
     * @param dv
     * @param consumer
     * @return
     */
    public static <DV> PageInfo<DV> offsetPage(DV dv, int offset, int limit, Function<DV, List<DV>> consumer) {
        PageHelper.offsetPage(offset, limit);
        return new PageInfo<>(consumer.apply(dv));
    }
}
